import {
  CallHandler,
  ExecutionContext,
  HttpStatus,
  Injectable,
  NestInterceptor
} from '@nestjs/common';
import { IResponse } from 'libs/globals';
import { map } from 'rxjs';

// @Injectable() 装饰器将CommonResponse类标记为可注入的服务
@Injectable()
// 导出CommonResponse类，使其可以在其他模块中使用
export class JcResponse<T> implements NestInterceptor<T, IResponse<T>> {
  // 实现NestInterceptor接口，拦截请求和响应
  intercept(_context: ExecutionContext, next: CallHandler) {
    // 调用next.handle()方法处理请求，并返回一个Observable对象
    return next.handle().pipe(
      // 使用map操作符将响应数据包装成指定格式的对象
      map((data: T) => ({
        data,
        code: HttpStatus.OK,
        message: 'success',
        success: true
      }))
    );
  }
}
